home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / Arashi 1.1 / Documentation / ArashiScript Instructions < prev    next >
Text File  |  1993-03-04  |  3KB  |  123 lines

  1.  
  2. Here's a short grammar of the language. It should be pretty obvious for anyone
  3. with a little background in grammars.
  4.  
  5. Items in braces can be repeated 
  6.  
  7. statement    ->    level n
  8.                 variable = compare
  9.  
  10. compare        ->    minmax { = minmax }
  11.                 minmax { > minmax }
  12.                 minmax { < minmax }
  13.  
  14. minmax        ->    expr { min expr }
  15.                 expr { max expr }
  16.  
  17. expr        ->    term { + term }
  18.                 term { - term }
  19.  
  20. term        ->    power { * power }
  21.                 power { / power }
  22.                 power { % power }
  23.  
  24. power        ->    factor { ^ factor }
  25.  
  26. factor        ->    (compare)
  27.                 -factor
  28.                 factor
  29.                 +factor
  30.                 variable
  31.                 constant
  32.                 function1 factor
  33.                 function0
  34.  
  35.  
  36. functions with no parameters: (function0)
  37.  
  38.         random
  39.  
  40. functions with one parameter: (function1)
  41.  
  42.         |         (abs)
  43.         sin
  44.         cos
  45.         int
  46.         round
  47.  
  48. keywords:
  49.         level
  50.  
  51.  
  52.     *********************
  53.     *    How it works    *
  54.     *********************
  55.  
  56. The idea is that you define variables and that new lines in
  57. the script will replace old lines. For a certain level, only
  58. those definitions that appear before the next greater 'level'
  59. statement will be used to define that level.
  60.  
  61. Order of evaluation is unspecified and there are no guarantees
  62. that variables will have reasonable values unless they are
  63. initialized. If a circular reference is encountered, an old
  64. value of a looped variable will be used to get out of the loop.
  65.  
  66. For instance:
  67.  
  68.     a = b
  69.     b = a + 1
  70.     
  71. If we evaluate a, we usually get 1 on the first round. This is
  72. because most variables are initialized to 0. If we execute it
  73. again, we get 2 etc. If, instead we evaluate b, we get 1, but
  74. the value of a will be 0. I hope this is confusing enough so
  75. that you will avoid circular references. Let's just say that
  76. they are not very useful, but they do not cause problems.
  77.  
  78. The order of evaluation is on a "need to know basis". I guess
  79. it's called intelligent recalculation in spreadsheet programs.
  80. Let's look at it with a short example:
  81.  
  82.     a = 10
  83.     b = a + 20
  84.     c = 30
  85.     d = b + a
  86.     
  87. If we then evaluate d, the system will try to evaluate b, notice
  88. that b requires a to be defined, so it evaluates a and then b. It
  89. then sees a again, but notices that it has been evaluated already
  90. and uses the old value. c does not get evaluated at all.
  91.  
  92. Let's look at something more complicated:
  93.  
  94.     level 1
  95.     
  96.         b = a
  97.         a = 1
  98.         a = 2
  99.  
  100.     level 16
  101.     
  102.         a = 3
  103.  
  104. From levels 1 to 15, b will evaluate to 2, because that's the last
  105. definition of a. From level 16, the value of b will be 3.
  106.  
  107. The definition a = 1 is not used at all, although it does get compiled
  108. before the next line replaces it.
  109.  
  110. To actually define a game level, you have to define variables that of
  111. interest to the game. These variables are introduced in a prescript
  112. resource. Feel free to peek at that resource to see what variables are
  113. available [during development, the prescript might be empty and the
  114. Arashi Script file could contain everything].
  115.  
  116. Variables that are prefixed with an 'i' are by convention internal
  117. variables. In the next part of the prescript, these variables are
  118. connected with variables that you should use. For instance, we have
  119. iFlipperCount and FlipperCount. You should use FlipperCount even though
  120. iFlipperCount is really the variable that the game wants. This convention
  121. allows us to scale or limit the values that can be set. For instance,
  122. we should probably limit FlipperCount to a minimum of 0.
  123.